﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Data;
using System.IO;
using System.Drawing;
namespace Sale_Common
{
    /// <summary>
    /// 对象值处理者类
    /// </summary>
    public static class ValueHandler
    {
        /// <summary>
        /// 非法字符处理枚举参数，选择IsDelChar：删除非法字符；选择IsRepChar：转换非法字符。
        /// </summary>
        public enum CharHandlerType
        {
            IsDelChar,
            IsRepChar
        }

        /// <summary>
        /// 得到所需要数据类型为int型的值的方法，如果传入的值不为null或者DBNull.Value或者空字符串并且不能转化为int型，则会抛出字符串转换异常！
        /// </summary>
        /// <param name="objValue">需要处理的Object类型的值</param>
        /// <returns>
        /// 如果Object的值为null或者DBNull.Value则返回“0”；
        /// 否则返回已转化为int型的Object的值。
        /// </returns>
        public static int GetIntNumberValue(object objValue)
        {
            return objValue == null || objValue == DBNull.Value || objValue.ToString().Equals("") ? 0 : Convert.ToInt32(objValue);
        }

        /// <summary>
        /// 得到所需要数据类型为decimal型的值的方法，如果传入的值不为null或者DBNull.Value或者空字符串并且不能转化为decimal型，则会抛出字符串转换异常！
        /// </summary>
        /// <param name="objValue">需要处理的Object类型的值</param>
        /// <returns>
        /// 如果Object的值为null或者DBNull.Value则返回“0”；
        /// 否则返回已转化为decimal型的Object的值。
        /// </returns>
        public static decimal GetDecNumberValue(object objValue)
        {
            return objValue == null || objValue == DBNull.Value || objValue.ToString().Equals("") ? 0 : Convert.ToDecimal(objValue.ToString().Replace("￥", "").Replace(",", ""));
        }

        /// <summary>
        /// 得到所需要数据类型为string型的值的方法，如果传入的值不为null或者DBNull.Value或者空字符串并且不能转化为string型，则会抛出字符串转换异常！
        /// </summary>
        /// <param name="objValue">需要处理的Object类型的值</param>
        /// <returns>
        /// 如果Object的值为null或者DBNull.Value则返回空字符串；
        /// 否则返回已转化为string型的Object的值。
        /// </returns>
        public static string GetStringValue(object objValue)
        {
            return objValue == null || objValue == DBNull.Value || objValue.ToString().Equals("") ? "" : objValue.ToString().Trim();
        }

        /// <summary>
        /// 得到所需要数据类型为string型的值的方法，如果传入的值不为null或者DBNull.Value或者空字符串并且不能转化为string型，则会抛出字符串转换异常！
        /// </summary>
        /// <param name="objValue">需要处理的Object类型的值</param>
        /// <param name="charHandlerType">非法字符处理枚举参数，选择IsDelChar：删除非法字符；选择IsRepChar：转换非法字符。</param>
        /// <returns>
        /// 如果Object的值为null或者DBNull.Value则返回空字符串；
        /// 否则返回已转化为string型的Object的值。
        /// </returns>
        public static string GetStringValue(object objValue, CharHandlerType charHandlerType)
        {
            string strReturn = "";
            if (objValue != null && objValue != DBNull.Value && !objValue.ToString().Equals(""))
            {
                switch (charHandlerType)
                {
                    case CharHandlerType.IsDelChar:
                        strReturn = objValue.ToString().Replace("'", "").Trim();
                        break;
                    case CharHandlerType.IsRepChar:
                        strReturn = objValue.ToString().Replace("'", "''").Trim();
                        break;
                }
            }

            return strReturn;
        }

        /// <summary>
        /// 得到所需要数据类型为string型的日期值的方法，如果传入的值不为null或者DBNull.Value或者空字符串并且不能转化为string型，则会抛出字符串转换异常！
        /// </summary>
        /// <param name="objValue">需要处理的Object类型的值</param>
        /// <returns>
        /// 如果Object的值为null或者DBNull.Value则返回带双引号的“"null"”；
        /// 否则返回已转化为带单引号的string型日期的Object的值，格式为“'2008-6-11'”等。
        /// </returns>
        public static string GetMarkStringDateValue(object objValue)
        {
            return objValue == null || objValue == DBNull.Value || objValue.ToString().Equals("") || objValue.ToString().Equals("0001-1-1 0:00:00") ? "null" : "'" + objValue + "'";
        }

        /// <summary>
        /// 得到所需要数据类型为string型的日期值的方法，如果传入的值不为null或者DBNull.Value或者空字符串并且不能转化为string型，则会抛出字符串转换异常！
        /// </summary>
        /// <param name="objValue">需要处理的Object类型的值</param>
        /// <returns>
        /// 如果Object的值为null或者DBNull.Value则返回空字符串；
        /// 否则返回已转化为string型日期的Object的值，格式为“2008-6-11”等。
        /// </returns>
        public static string GetStringDateValue(object objValue)
        {
            return objValue == null || objValue == DBNull.Value || objValue.ToString().Equals("") ? "" : objValue.ToString();
        }
        /// <summary>
        /// 得到所需要数据类型为string型的日期值的方法，如果传入的值不为null或者DBNull.Value或者空字符串并且不能转化为string型，则会抛出字符串转换异常！
        /// </summary>
        /// <param name="objValue">需要处理的Object类型的值</param>
        /// <returns>
        /// 如果Object的值为null或者DBNull.Value则返回空字符串；
        /// 否则返回已转化为string型日期的Object的值，格式为“2008-6-11”等。
        /// </returns>
        public static string GetStringShortDateValue(object objValue)
        {
            return objValue == null || objValue == DBNull.Value || objValue.ToString().Equals("") ? "" :DateTime.Parse( objValue.ToString()).ToString("yyyy-MM-dd") ;
        }
        /// <summary>
        /// 将图片类型转换为Byte[]类型
        /// </summary>
        /// <param name="imgValue">System.Drawing.Image</param>
        /// <returns></returns>
        public static Byte[] GetByteByImage( object objValue)
        {
            System.Drawing.Image imgValue = objValue as System.Drawing.Image;
            ImageConverter ic = new ImageConverter();
            Byte[] byteImg = (Byte[])ic.ConvertTo(imgValue, typeof(Byte[]));
            return byteImg;
        }
        /// <summary>
        /// 将图片类型转换为Byte[]类型
        /// </summary>
        /// <param name="imgValue">System.Drawing.Image</param>
        /// <returns></returns>
        public static Byte[] GetByteByImageURL(object objValue)
        {
            System.Drawing.Image imgValue = System.Drawing.Image.FromFile(objValue.ToString());
            ImageConverter ic = new ImageConverter();
            Byte[] byteImg = (Byte[])ic.ConvertTo(imgValue, typeof(Byte[]));
            return byteImg;
        }

        /// <summary>
        /// 将Byte[]类型转换为图片
        /// </summary>
        /// <param name="byteValue">Byte[] byteValue</param>
        /// <returns></returns>
        public static  System.Drawing.Image GetImageValue(object objValue)
        {

            Byte[] byteValue = objValue as Byte[];
            if (byteValue == null ||  byteValue.Length <= 0)
                return null;
            Stream st = new MemoryStream(byteValue);
            Image img = Image.FromStream(st);
            return img;
        }
    }
}
